if(S.bioheat==1)                               %define objective function
    f=@(v) bioheat_obj(v);
elseif(S.bioheat==0)
    f=@(v) simulated_obj(v);
end
if(S.bioheat==0)
    if(S.needle_num==2)
        n_x    = 10;                           % 'n_x' state
        limits=[S.minX,S.maxX;S.minY,S.maxY;S.minZ,S.maxZ;S.minX,S.maxX;S.minY,S.maxY;S.minZ,S.maxZ;0,180;0,180;0,180;0,180;];
    elseif(S.needle_num==3)
        n_x  = 15;
        limits=[S.minX,S.maxX;S.minY,S.maxY;S.minZ,S.maxZ;S.minX,S.maxX;S.minY,S.maxY;S.minZ,S.maxZ;0,180;0,180;0,180;0,180;...
            S.minX,S.maxX;S.minY,S.maxY;S.minZ,S.maxZ;0,180;0,180;];  % 3 needles case
    end
end

if(S.bioheat==1)
        Data.xlow=[S.boundx+S.b S.boundy+S.b S.boundz+S.b 0 0]; 
        Data.xup=[ max(S.x)-min(S.x)+S.boundx-S.b  max(S.y)-min(S.y)+S.boundy-S.b  max(S.z)-min(S.z)+S.boundz-S.b 180 180];
        if(S.needle_num==2)
            n_x    = 10;                           % 'n_x' state
            Data.xlow = [Data.xlow Data.xlow];
            Data.xup = [Data.xup Data.xup];
        elseif(S.needle_num==3)
            n_x  = 15;
            Data.xlow = [Data.xlow Data.xlow Data.xlow];
            Data.xup = [Data.xup Data.xup Data.xup];
        elseif(S.needle_num==4)
            n_x  = 20;
            Data.xlow = [Data.xlow Data.xlow Data.xlow Data.xlow];
            Data.xup = [Data.xup Data.xup Data.xup Data.xup];
        elseif(S.needle_num==5)
            n_x  = 25;
            Data.xlow = [Data.xlow Data.xlow Data.xlow Data.xlow Data.xlow];
            Data.xup = [Data.xup Data.xup Data.xup Data.xup Data.xup];
        end
        limits=[Data.xlow;Data.xup]';
end
[x0,f0]=sim_anl(f,limits(:,1),limits(:,1),limits(:,2),S.runs);